home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-04-16 | 8.6 KB | 274 lines | [TEXT/MPS ] |
- % DVI-to-PS prolog used by OzTeX 1.9 with standard Mac print drivers.
- % Uncomment the following line to prevent a timeout error when
- % creating missing PK fonts.
-
- % statusdict begin /waittimeout 0 def end
-
- /OzTeXdict 200 dict def % enough room for about 150 fonts
- OzTeXdict begin
-
- /@setup % set up OzTeX
- { /res exch def % resolution (defines dots per inch)
- /ht exch def % paper height (in dots)
- /wd exch def % paper width (in dots)
- /land wd ht gt def % landscape orientation?
- } def
-
- /newPKfont % create new PK font
- { /maxchcode exch def
- /fontid exch def
- fontid 7 dict def
- fontid load begin
- /FontType 3 def
- /FontMatrix [1 0 0 -1 0 0] def
- /FontBBox [0 0 1 1] def
- /BitMaps maxchcode 1 add array def
- /BuildChar {CharBuilder} def
- /Encoding 256 array def
- 0 1 255 {Encoding exch /.notdef put} for
- end
- fontid fontid load definefont setfont
- } def
-
- % The char data, a bitmap descriptor, is an array with 6 elements;
- % element 0 is either a hex string or an array of hex strings (the latter
- % is required for large PK chars with more than 65535 hex digits).
-
- /ch-image {ch-data 0 get dup type /stringtype ne {N get /N N 1 add def} if
- } def % hex string
- /ch-width {ch-data 1 get} def % the number of pixels across
- /ch-height {ch-data 2 get} def % the number of pixels tall
- /ch-xoff {ch-data 3 get} def % number of pixels to left of origin
- /ch-yoff {ch-data 4 get} def % number of pixels below origin
- /ch-advw {ch-data 5 get} def % advance width
-
- % The following character builder looks up the char data in the BitMaps array
- % and paints the character.
-
- /CharBuilder % image one char
- { /ch-code exch def % save the char code
- /font-dict exch def % and the font dict
- /ch-data font-dict /BitMaps get
- ch-code get def
- /N 0 def
- ch-advw 0
- ch-xoff neg ch-height ch-yoff sub 1 sub neg % -xo , -(ht-yo-1)
- ch-width ch-xoff sub 1 sub ch-yoff % (wd-xo-1) , yo
- setcachedevice
- ch-width ch-height true
- [1 0 0 -1 ch-xoff ch-yoff] % bitmap sent top to bottom
- {ch-image}
- imagemask
- } def
-
- /sf {setfont} def % set current font
-
- /dc % define new character
- { /ch-code exch def
- /ch-data exch def
- currentfont /BitMaps get ch-code ch-data put
- currentfont /Encoding get ch-code
- dup ( ) cvs cvn put % generate unique name
- } bind def
-
- /@bop0 % begin page n
- { pop % throw away page number
-
- % Determine printing scale.
-
- 0 0 transform /y0 exch def /x0 exch def
- res res transform
- /ydiff exch y0 sub abs def
- /xdiff exch x0 sub abs def
- /yscale ydiff res div def % used below and in @bsp
- /xscale xdiff res div def % ditto
-
- % For aligning rules, make sure ALL values in CTM are integers.
- % But only do so if printing at or near 100% scale, otherwise
- % an "undefinedresult" error might occur.
-
- xscale 1.0 sub abs .001 lt yscale 1.0 sub abs .001 lt and
- { matrix currentmatrix
- dup dup 0 get round cvi 0 exch put
- dup dup 1 get round cvi 1 exch put
- dup dup 2 get round cvi 2 exch put
- dup dup 3 get round cvi 3 exch put
- dup dup 4 get round cvi 4 exch put
- dup dup 5 get round cvi 5 exch put
- setmatrix
- } if
-
- % r is used to typeset a rule. Some adjustment may be needed for
- % different printer models; test results on page 18 in nasty.dvi.
-
- land % landscape?
- { /r % set a wd by ht rule at h,v
- { newpath
- 1 add moveto % move to h,v+1
- /ht exch 1 sub def % reduce height by 1
- /wd exch 1 sub def % ditto for width
- wd 0 rlineto
- 0 ht neg rlineto
- wd neg 0 rlineto
- fill
- } bind def
- }
- { /r % set a wd by ht rule at h,v
- { newpath
- moveto % move to h,v
- /ht exch 1 sub def % reduce height by 1
- /wd exch 1 sub def % ditto for width
- wd 0 rlineto
- 0 ht neg rlineto
- wd neg 0 rlineto
- fill
- } bind def
- } ifelse
-
- } def
-
- /mtrx 6 array def
-
- /@bop1 % begin typesetting page n
- { pop % throw away page number
- mtrx currentmatrix pop % for rotating TeX material
- } def
-
- /@eop % end page n
- { pop % throw away page number
-
- % Use following line to help set max length of OzTeXdict.
- % OzTeXdict length 10 string cvs print (\r) print flush
- } def
-
- % h and s are used to typeset downloaded bitmap fonts.
-
- /h {exch 0 rmoveto show} bind def % move right by dh and show (...)
-
- /s {3 1 roll moveto show} bind def % move to h,v and show (...)
-
- % H and S are used to typeset PostScript fonts.
- % We can't use relative horizontal positioning because the advance widths in
- % a PostScript font are not integers and rounding errors would accumulate.
-
- /H {exch v moveto show} bind def % move to h,v and show (...)
-
- /S % ditto, and save v position
- { 3 1 roll
- 1 add % v+1 to match baseline of bitmap fonts
- dup /v exch def
- moveto show
- } bind def
-
- % Following 2 procedures are invoked as the result of \special{file}.
- % Unlike @bepsf, we have no BoundingBox info, so we must use initgraphics
- % and make a risky assumption about which way to rotate if landscape.
-
- /@bsp
- { /vmag exch def % vertical scaling
- /hmag exch def % horizontal scaling
- moveto % move to h,v
- /prespecialVM save def % save showpage, TeX procedures etc.
- userdict begin % push userdict on dict stack
- /showpage {} def % user does not have to remove showpage
- currentpoint transform
- initgraphics itransform translate % move 0,0 to h,v
- hmag vmag scale
- xscale yscale scale % calculated in @bop0
- land { -90 rotate } if % rotate axes if landscape
- } bind def
-
- /@esp
- { end % pop userdict
- prespecialVM restore % restore saved showpage value etc
- } bind def
-
- % Following 2 procedures are invoked as the result of \special{epsf=file}.
-
- /@bepsf
- { /lly exch def % LLy for BoundingBox
- /llx exch def % LLx for BoundingBox
- /vmag exch def % vertical scaling
- /hmag exch def % horizontal scaling
- /vpos exch def % v pos of \special box
- /hpos exch def % h pos of \special box
- /prespecialVM save def % save showpage, TeX procedures etc
- userdict begin % push userdict on dict stack
- /showpage {} def % user does not have to remove showpage
- hpos vpos translate % move 0,0 to h,v
- hmag vmag scale % scale BoundingBox
- llx neg lly neg translate % move LLx,LLy to h,v
- } bind def
-
- /@eepsf
- { end % pop userdict
- prespecialVM restore % restore saved showpage value etc
- } bind def
-
- % Here is the code to handle bitmaps generated by PICT/PNTG \specials.
-
- /@bitmap
- { /vmag exch def % vertical scaling
- /hmag exch def % horizontal scaling
- /vres exch def % vertical resolution of bitmap
- /hres exch def % horizontal resolution of bitmap
- /ht exch def % height
- /wd exch def % width
- /hexstring ht string def
- gsave
- 1 add translate % set origin to h,v+1
- res hres div wd mul hmag mul
- res vres div ht mul vmag mul neg scale
- wd ht true
- [ wd 0 0 ht neg 0 ht ]
- { currentfile hexstring readhexstring pop }
- imagemask
- grestore
- } def
-
- % Here are the definitions needed to handle PostScript fonts.
-
- /namestr 60 string def % for names
- /numstr 12 string def % for numbers
-
- /newPSfont % create new PS font
- { /fontname exch def % printer font name
- /mag exch def % DVI mag
- /scaledpts exch def % font size in scaled pts
-
- % Use scaledpts and mag to calculate font size in device dots.
- scaledpts 16#10000 div % scaled pts to pts
- res mul 72.27 div % pts to device dots
- mag 1000 div mul % scale by mag/1000
- /dotsize exch def
- /done false def
-
- % If fontname starts with "Slanted-" then construct slanted font.
- fontname namestr cvs (Slanted-) anchorsearch
- { pop cvn findfont [1 0 .167 -1 0 0] makefont dotsize scalefont
- /done true def
- }{ pop } ifelse
-
- % Other nice tricks can be included here if you build the required
- % fonts and add appropriate printer font names to your config file.
- % fontname namestr cvs (Extended-) anchorsearch
- % { pop cvn findfont [1.2 0 0 -1 0 0] makefont dotsize scalefont
- % /done true def
- % }{ pop } ifelse
-
- done not
- { fontname findfont [1 0 0 -1 0 0] makefont dotsize scalefont
- } if
-
- % Modified font dictionary is on stack, so remember it for later setfont
- % via a unique name that is the concatenation of fontname and scaledpts.
- fontname length scaledpts numstr cvs length add
- /newname exch string def
- newname 0 fontname namestr cvs putinterval
- newname fontname length scaledpts numstr cvs putinterval
- newname cvn exch def
- } bind def
-
- % Do NOT include matching "end" for "OzTeXdict begin" in this file.
- % OzTeX will add "end" after downloading font info.
-